Laravel হলো একটি ওপেন-সোর্স PHP ফ্রেমওয়ার্ক যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টকে সহজ এবং দ্রুত করে তোলে। এটি MVC (Model-View-Controller) আর্কিটেকচার অনুসরণ করে, যা কোডের গঠন এবং রক্ষণাবেক্ষণকে সুগঠিত করে। Laravel এর মাধ্যমে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের কাজ দ্রুত এবং নির্ভুলভাবে করা যায়।
MVC Architecture:
Routing:
Blade Templating Engine:
Eloquent ORM (Object-Relational Mapping):
Artisan Command Line Interface (CLI):
Migration and Database Seeding:
Authentication and Authorization:
Testing:
Laravel ইন্সটল করার জন্য আপনাকে Composer ব্যবহার করতে হবে। Composer হলো PHP এর একটি ডিপেন্ডেন্সি ম্যানেজার।
Composer ইন্সটল করুন (যদি না থাকে):
curl -sS https://getcomposer.org/installer | php
Laravel প্রজেক্ট তৈরি করুন:
composer create-project --prefer-dist laravel/laravel my-laravel-app
Laravel সার্ভার চালু করুন:
php artisan serve
এখন, আপনি ব্রাউজারে http://localhost:8000
এ আপনার নতুন Laravel অ্যাপ্লিকেশনটি দেখতে পারবেন।
Laravel অ্যাপ্লিকেশনের ফোল্ডার স্ট্রাকচার খুবই সুগঠিত। এর কিছু গুরুত্বপূর্ণ ফোল্ডার নিম্নে উল্লেখ করা হলো:
Laravel একটি শক্তিশালী এবং ফিচার-সমৃদ্ধ ফ্রেমওয়ার্ক যা ডেভেলপারদের ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের প্রক্রিয়া সহজ, দ্রুত এবং কার্যকরী করে তোলে। MVC আর্কিটেকচার, সহজ রাউটিং, Blade টেমপ্লেটিং, Eloquent ORM এবং আরও অনেক ফিচার Laravel কে জনপ্রিয় এবং সুবিধাজনক করে তুলেছে।
লারাভেল (Laravel) হলো একটি শক্তিশালী ও জনপ্রিয় PHP ফ্রেমওয়ার্ক, যা সহজে এবং দ্রুত ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। লারাভেলের অন্যতম প্রধান বৈশিষ্ট্য হলো এর রাউটিং সিস্টেম, যা URL বা পাথের সাথে নির্দিষ্ট কার্যক্রম বা কন্ট্রোলারের ফাংশনকে যুক্ত করতে সহায়তা করে। লারাভেল রাউটিং সিস্টেমের মাধ্যমে আমরা সহজে ও ব্যবহার উপযোগীভাবে ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারি। এখানে আমরা Laravel Routing-এর বিভিন্ন দিক বিস্তারিতভাবে আলোচনা করব।
লারাভেল রাউটিং আপনার অ্যাপ্লিকেশনের বিভিন্ন URL-কে নির্দিষ্ট ফাংশন বা কন্ট্রোলারের সাথে সংযুক্ত করতে সাহায্য করে। এটি কীভাবে কাজ করে এবং এর মাধ্যমে কীভাবে অ্যাপ্লিকেশনের বিভিন্ন অংশ নির্ধারণ করা যায়, তা আমরা এখানে আলোচনা করবো।
লারাভেলে সবচেয়ে সাধারণ রাউটিং হচ্ছে GET
, POST
, PUT
, এবং DELETE
HTTP রিকোয়েস্ট মেথডের মাধ্যমে রাউট নির্ধারণ করা।
Route::get('/home', function () {
return 'Welcome to the Home Page!';
});
এখানে /home
রাউটটি যখন কেউ ভিজিট করবে, তখন "Welcome to the Home Page!" মেসেজটি দেখানো হবে।
লারাভেলের মধ্যে রাউট ফাইলগুলো হলো:
routes/web.php
: ওয়েব ভিত্তিক রাউটের জন্য। এখানে ডিফল্ট সেশন এবং CSRF প্রটেকশন থাকে।routes/api.php
: API রাউটের জন্য। এখানে সেশন ব্যবহৃত হয় না এবং API ভিত্তিক অ্যাপ্লিকেশনের জন্য প্রযোজ্য।কোনো একটি URL-কে অন্য একটি URL-এ রিডিরেক্ট করতে চাইলে লারাভেলের Route::redirect
ব্যবহার করা হয়।
Route::redirect('/old-home', '/new-home');
এটি /old-home
রাউট থেকে /new-home
এ রিডিরেক্ট করবে।
কোনো রাউট থেকে সরাসরি ভিউ প্রদর্শন করা যায় Route::view
এর মাধ্যমে।
Route::view('/welcome', 'welcome');
এটি /welcome
রাউটে ভিজিট করলে resources/views/welcome.blade.php
ভিউটি রিটার্ন করবে।
আপনার অ্যাপ্লিকেশনের সমস্ত রাউট দেখতে চাইলে php artisan route:list
কমান্ড চালাতে পারেন।
রাউটকে কাস্টমাইজ করার জন্য লারাভেলে অনেক বৈশিষ্ট্য রয়েছে, যেমন রাউট প্যারামিটার, নেমড রাউট, এবং রাউট গ্রুপিং ইত্যাদি।
লারাভেলে রাউটের মধ্যে ডাইনামিক প্যারামিটার পাস করা যায়।
Route::get('/user/{id}', function ($id) {
return "User ID is: {$id}";
});
এখানে {id}
একটি রিকোয়েস্ট প্যারামিটার, যা URL থেকে ধরে নিয়ে কাজ করে।
Route::get('/user/{name?}', function ($name = 'Guest') {
return "User Name: {$name}";
});
এখানে {name}
প্যারামিটারটি ঐচ্ছিক এবং ডিফল্ট ভ্যালু Guest
সেট করা হয়েছে।
Route::get('/user/{id}', function ($id) {
return "User ID is: {$id}";
})->where('id', '[0-9]+');
এখানে id
শুধুমাত্র সংখ্যা হতে পারে।
রাউটের জন্য একটি নাম নির্ধারণ করা যায়, যাতে এটি পরবর্তীতে সহজে ব্যবহার করা যায়।
Route::get('/profile', 'ProfileController@show')->name('profile.show');
এখন আপনি এই রাউটটি যেকোনো জায়গায় route('profile.show')
এর মাধ্যমে ব্যবহার করতে পারেন।
রাউট গ্রুপ করার মাধ্যমে একাধিক রাউটের জন্য একই ধরনের সেটিংস প্রয়োগ করা যায়, যেমন middleware, namespaces ইত্যাদি।
Route::group(['prefix' => 'admin'], function () {
Route::get('/users', function () {
// অ্যাডমিনের জন্য ইউজার তালিকা
});
});
এখানে /admin/users
এ ভিজিট করলে ইউজার তালিকা দেখাবে।
Middleware রাউটের উপর নির্দিষ্ট ফিল্টার প্রয়োগ করার জন্য ব্যবহৃত হয়। এটি অনুমোদন, অথেনটিকেশন ইত্যাদির জন্য খুবই কার্যকর।
Route::get('/dashboard', function () {
// শুধুমাত্র অথেনটিকেটেড ইউজারদের জন্য
})->middleware('auth');
লারাভেলে রাউটের জন্য লজিক কন্ট্রোলারে রাখা যায়। এটি কোডকে সংগঠিত ও পুনরায় ব্যবহারযোগ্য করে তোলে।
Route::get('/users', [UserController::class, 'index']);
আপনি সাবডোমেইনের জন্য রাউট নির্ধারণ করতে পারেন।
Route::domain('{account}.example.com')->group(function () {
Route::get('user/{id}', function ($account, $id) {
return "Account: {$account}, User ID: {$id}";
});
});
রাউটের জন্য একটি প্রিফিক্স নির্ধারণ করা যায়, যাতে সব রাউটের সামনে একটি নির্দিষ্ট অংশ যুক্ত হয়।
Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
return 'Admin Dashboard';
});
});
এটি /admin/dashboard
এ ভিজিট করলে Admin Dashboard
দেখাবে।
লারাভেলে রাউট প্যারামিটার থেকে সরাসরি মডেল ধরে আনতে রাউট মডেল বাইন্ডিং ব্যবহৃত হয়।
Route::get('/user/{user}', function (User $user) {
return $user;
});
এখানে {user}
প্যারামিটার থেকে স্বয়ংক্রিয়ভাবে User মডেলের ডেটা পাওয়া যাবে।
Route::bind('user', function ($value) {
return User::where('name', $value)->firstOrFail();
});
লারাভেলে ফলব্যাক রাউট তখন ব্যবহৃত হয় যখন কোনো রাউট পাওয়া না যায়।
Route::fallback(function () {
return 'Page Not Found';
});
রেট লিমিটিং ব্যবহার করে API বা ওয়েব রিকোয়েস্টের ওপর সীমা আরোপ করা যায়, যাতে কোনো নির্দিষ্ট সময়ে অধিক রিকোয়েস্ট প্রেরণ করা না হয়।
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('global', function (Request $request) {
return Limit::perMinute(100);
});
Route::middleware('throttle:global')->group(function () {
Route::get('/profile', 'ProfileController@show');
});
HTML ফর্ম শুধুমাত্র GET
ও POST
মেথড সমর্থন করে। কিন্তু Laravel ফর্ম মেথড স্পুফিং ব্যবহার করে PUT
, PATCH
, বা DELETE
সমর্থন করে।
<form action="/post" method="POST">
@method('PUT')
@csrf
<button type="submit">Update Post</button>
</form>
বর্তমান রাউট সম্পর্কিত তথ্য অ্যাক্সেস করতে Route::current()
ব্যবহার করা হয়।
$currentRoute = Route::current()->getName();
CORS ব্যবহৃত হয় API বা অন্যান্য সিস্টেম থেকে আসা রিকোয়েস্ট অনুমোদনের জন্য।
আপনার cors.php
কনফিগ ফাইলে CORS নির্ধারণ করা যায়।
'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedMethods' => ['*'],
'allowedHeaders' => ['*'],
বড় অ্যাপ্লিকেশনগুলোর পারফরম্যান্স বাড়ানোর জন্য রাউট ক্যাশিং গুরুত্বপূর্ণ। php artisan route:cache
কমান্ড ব্যবহার করে রাউট ক্যাশ করা হয়।
লারাভেলের রাউটিং সিস্টেম একটি অত্যন্ত শক্তিশালী এবং ফ্লেক্সিবল টুল, যা ডেভেলপারদের অ্যাপ্লিকেশনের বিভিন্ন অংশকে নির্দিষ্টভাবে পরিচালনা করতে সহায়তা করে। এটি সাধারণ রাউট থেকে শুরু করে ডাইনামিক রাউট, সাবডোমেইন রাউটিং, মিডলওয়্যার ব্যবহারের মাধ্যমে নিরাপত্তা এবং কন্ট্রোলারের সাথে কাজ করার সুযোগ দেয়। রাউট গ্রুপিং, প্রিফিক্সিং এবং মডেল বাইন্ডিং লারাভেলের রাউটিং ব্যবস্থাকে আরও মজবুত এবং সহজ করে তোলে। বড় অ্যাপ্লিকেশন তৈরির ক্ষেত্রে লারাভেলের রাউটিং সিস্টেম ডেভেলপারদের জন্য কোডকে সংগঠিত এবং পুনঃব্যবহারযোগ্য করে তোলে, যা ডেভেলপমেন্টে সময় এবং প্রচেষ্টা সাশ্রয় করে।
Middleware লারাভেলের একটি গুরুত্বপূর্ণ ফিচার যা একটি রিকোয়েস্ট এবং রেসপন্সের মধ্যে বিভিন্ন লজিক বা শর্তাবলী প্রয়োগ করতে ব্যবহৃত হয়। এটি প্রধানত নিরাপত্তা এবং অথেনটিকেশনসহ বিভিন্ন কার্যক্রম পরিচালনার জন্য ব্যবহৃত হয়। Middleware আপনাকে নির্দিষ্ট রাউট বা কন্ট্রোলার মেথডের আগে বা পরে কাজ করতে দেয়।
Middleware হলো একটি ফিল্টার যা একটি HTTP রিকোয়েস্টের জন্য কিছু কাজ পরিচালনা করে। উদাহরণস্বরূপ, একটি অথেনটিকেশন মিডলওয়্যার ইউজার লগইন আছে কিনা তা যাচাই করে এবং ইউজার লগইন না থাকলে তাকে লগইন পেজে রিডিরেক্ট করে। Middleware প্রধানত অ্যাপ্লিকেশন স্তরে রিকোয়েস্ট ফিল্টারিং এবং প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।
লারাভেলে নতুন Middleware তৈরি করতে আপনি php artisan make:middleware MiddlewareName
কমান্ডটি ব্যবহার করতে পারেন। এটি app/Http/Middleware
ডিরেক্টরিতে একটি নতুন Middleware ফাইল তৈরি করবে।
php artisan make:middleware CheckAge
এই কমান্ডটি চালালে, CheckAge.php
নামে একটি ফাইল তৈরি হবে। এখানে আপনি handle()
মেথডে আপনার লজিক যুক্ত করতে পারবেন।
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}
return $next($request);
}
এই উদাহরণে, যদি ইউজারের বয়স ১৮ বছরের কম হয়, তাহলে তাকে home
পেজে রিডিরেক্ট করা হবে।
Middleware তৈরি করার পরে, এটিকে app/Http/Kernel.php
ফাইলে নিবন্ধন করতে হবে।
protected $routeMiddleware = [
'checkAge' => \App\Http\Middleware\CheckAge::class,
];
এখানে checkAge
নামে Middleware রেজিস্টার করা হলো, যা পরে রাউটে ব্যবহার করা যাবে।
Global Middleware হলো এমন Middleware, যা প্রতিটি HTTP রিকোয়েস্টে স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়। এগুলোকে app/Http/Kernel.php
ফাইলে $middleware
অ্যারের মধ্যে নিবন্ধন করতে হয়।
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
// অন্য গ্লোবাল মিডলওয়্যার
];
এখানে Middleware গুলো সকল রিকোয়েস্টের জন্য প্রয়োগ হবে।
Middleware এক বা একাধিক রাউটের জন্য প্রয়োগ করা যায়। এর জন্য রাউটে middleware
মেথড ব্যবহার করতে হবে।
Route::get('/profile', function () {
// Profile view logic
})->middleware('checkAge');
এখানে checkAge
Middleware প্রয়োগ করা হয়েছে, যা রাউট এক্সেসের আগে বয়স যাচাই করবে।
Middleware গ্রুপিং ব্যবহার করে একাধিক Middleware একসাথে একাধিক রাউটে প্রয়োগ করা যায়। লারাভেলে web
এবং api
নামে দুটি ডিফল্ট Middleware গ্রুপ আছে।
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
এখানে web
এবং api
গ্রুপগুলো আলাদা ভাবে একাধিক Middleware যুক্ত করে তৈরি করা হয়েছে।
Middleware এর জন্য এলিয়াস বা সংক্ষিপ্ত নাম তৈরি করা যায়, যা রাউটে সহজেই ব্যবহার করা সম্ভব।
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
];
এখানে auth
নামে এলিয়াস তৈরি করা হয়েছে, যা রাউটে সহজেই ব্যবহার করা যাবে।
কিছু Middleware একটি নির্দিষ্ট ক্রমে কাজ করতে পারে, যেমন সিকোয়েন্স মেনে মিডলওয়্যারগুলো কাজ করবে। Middleware গুলোর কার্যক্রমের আগে বা পরে কাজ করার জন্য Middleware গুলোর ক্রম নির্ধারণ করতে পারেন।
Middleware-এ প্যারামিটার পাস করে শর্তাবলী আরও নির্দিষ্ট করা যায়। Middleware এর সাথে প্যারামিটার পাস করতে middleware
মেথডে প্যারামিটার যুক্ত করা হয়।
Route::get('/user/{id}', function ($id) {
// ইউজার সম্পর্কিত তথ্য
})->middleware('role:admin');
এখানে role
Middleware এ admin
প্যারামিটার পাস করা হয়েছে।
কিছু Middleware আছে, যা রেসপন্স পাঠানোর পরে কাজ করে। এ ধরনের Middleware কে terminable middleware
বলা হয়। এর জন্য Middleware ক্লাসে একটি terminate
মেথড ব্যবহার করা হয়।
public function terminate($request, $response)
{
// After response is sent
}
এই মেথডটি রেসপন্স পাঠানোর পরেও কার্যকর হবে।
লারাভেলের Middleware অ্যাপ্লিকেশন নিরাপত্তা, অথেনটিকেশন, অথরাইজেশনসহ বিভিন্ন কাজে গুরুত্বপূর্ণ ভূমিকা পালন করে। Middleware ব্যবহারের মাধ্যমে আপনি সহজে অ্যাপ্লিকেশনের কার্যক্রম নিয়ন্ত্রণ করতে পারেন। Middleware-এর মাধ্যমে আপনি রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়ায় বিভিন্ন নিয়ম এবং লজিক যুক্ত করে অ্যাপ্লিকেশনকে আরও নিরাপদ এবং কার্যকর করতে পারেন।
CSRF (Cross-Site Request Forgery) একটি সাধারণ নিরাপত্তা ঝুঁকি যেখানে একটি দূষিত সাইট ব্যবহারকারীর অনুমতি ছাড়া তাদের অ্যাকাউন্টে বিভিন্ন অনিচ্ছাকৃত কাজ করতে বাধ্য করে। লারাভেল এই ধরনের আক্রমণ প্রতিরোধের জন্য একটি বিল্ট-ইন সুরক্ষা ব্যবস্থা প্রদান করে, যা CSRF Protection নামে পরিচিত।
লারাভেল স্বয়ংক্রিয়ভাবে সমস্ত POST, PUT, PATCH, এবং DELETE HTTP রিকোয়েস্টের সাথে CSRF টোকেন যাচাই করে, যা নিশ্চিত করে যে রিকোয়েস্টটি আপনার অ্যাপ্লিকেশন থেকে এসেছে। GET রিকোয়েস্টের জন্য এটি প্রয়োজন হয় না, কারণ সেগুলি সাধারণত ডেটা পরিবর্তন করে না।
প্রতিটি HTML ফর্মে CSRF টোকেন যুক্ত করতে হবে, যা লারাভেল সহজেই প্রদান করে। আপনি @csrf
ডিরেক্টিভ ব্যবহার করে এই টোকেনটি ফর্মে যোগ করতে পারেন।
<form method="POST" action="/profile">
@csrf
<!-- ফর্মের অন্যান্য ইনপুট -->
<button type="submit">Submit</button>
</form>
এটি আপনার ফর্মে একটি গোপন ইনপুট ফিল্ড যোগ করবে, যেখানে CSRF টোকেনটি ইনক্লুড থাকবে। লারাভেল এই টোকেনের মাধ্যমে যাচাই করবে যে রিকোয়েস্টটি আপনার অ্যাপ্লিকেশন থেকে এসেছে।
আপনার অ্যাপ্লিকেশনের কিছু নির্দিষ্ট URI-তে CSRF টোকেন যাচাই করতে না চাইলে, সেই URI গুলোকে VerifyCsrfToken
মিডলওয়্যারে বাদ দিতে পারেন। app/Http/Middleware/VerifyCsrfToken.php
ফাইলে except
প্রপার্টির মধ্যে এই URI গুলো উল্লেখ করতে হবে।
protected $except = [
'stripe/*',
'http://example.com/payments/*',
];
এখানে stripe/*
এবং payments/*
URI গুলো CSRF যাচাই থেকে বাদ দেওয়া হয়েছে।
কিছু সময় আপনি JavaScript ব্যবহার করে AJAX রিকোয়েস্ট করতে পারেন। এর জন্য, লারাভেল আপনাকে CSRF টোকেন X-CSRF-Token
হেডার হিসেবে পাঠানোর সুযোগ দেয়।
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
এখানে টোকেনটি meta
ট্যাগ থেকে নিয়ে AJAX রিকোয়েস্টের সাথে হেডারে পাঠানো হয়েছে।
যদি আপনি XHR বা JavaScript ফ্রেমওয়ার্ক যেমন Vue বা Angular ব্যবহার করেন, তাহলে লারাভেল X-XSRF-Token
কুকি ব্যবহার করে সুরক্ষা প্রদান করতে পারে। লারাভেল এই কুকিটি স্বয়ংক্রিয়ভাবে সঠিকভাবে সেট করে, এবং আপনি এই কুকিকে AJAX রিকোয়েস্টে হেডার হিসেবে ব্যবহার করতে পারেন।
axios.defaults.headers.common['X-XSRF-TOKEN'] = getCookie('XSRF-TOKEN');
এখানে XSRF-TOKEN
কুকি থেকে টোকেনটি পড়ে AJAX রিকোয়েস্টের সাথে পাঠানো হয়েছে।
CSRF Protection লারাভেলে একটি অত্যন্ত গুরুত্বপূর্ণ সিকিউরিটি ফিচার, যা আপনার অ্যাপ্লিকেশনকে দূষিত রিকোয়েস্ট থেকে রক্ষা করে। আপনি খুব সহজেই ফর্মে @csrf
ডিরেক্টিভ ব্যবহার করে বা AJAX রিকোয়েস্টে টোকেন পাঠিয়ে এই সুরক্ষা নিশ্চিত করতে পারেন। এছাড়া, নির্দিষ্ট URI গুলোতে প্রয়োজন না হলে CSRF যাচাই বাদ দেয়ারও সুবিধা আছে, যা অ্যাপ্লিকেশনকে আরও ফ্লেক্সিবল করে তোলে।
Controllers লারাভেলের একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশন লজিক এবং HTTP রিকোয়েস্ট পরিচালনা করে। Controllers-এর মাধ্যমে রাউটের সাথে যুক্ত লজিক আলাদা করা যায়, যা কোডকে পরিষ্কার এবং সংগঠিত করে। নিচে Controllers-এর বিভিন্ন দিক নিয়ে আলোচনা করা হলো।
Controllers HTTP রিকোয়েস্টের জন্য লজিক পরিচালনা করে। এগুলি বিভিন্ন মেথডে বিভক্ত থাকে, প্রতিটি মেথড সাধারণত একটি নির্দিষ্ট রাউটের জন্য ব্যবহৃত হয়। Controllers ব্যবহার করে কোডের পুনঃব্যবহার এবং রক্ষণাবেক্ষণ সহজ হয়।
নতুন কন্ট্রোলার তৈরি করতে আপনি php artisan make:controller ControllerName
কমান্ড ব্যবহার করতে পারেন।
php artisan make:controller UserController
এটি app/Http/Controllers
ডিরেক্টরিতে একটি নতুন UserController.php
ফাইল তৈরি করবে।
মৌলিক কন্ট্রোলার হলো সিম্পল ক্লাস যা HTTP রিকোয়েস্ট পরিচালনা করে। এগুলোর মধ্যে একাধিক মেথড থাকতে পারে।
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
return view('users.index');
}
public function show($id)
{
return view('users.show', ['user' => User::find($id)]);
}
}
একক অ্যাকশন কন্ট্রোলার শুধুমাত্র একটি মেথড ধারণ করে। এগুলো ছোট এবং বিশেষায়িত রাউটগুলোর জন্য উপযুক্ত।
php artisan make:controller ShowProfileController --invokable
এটি __invoke()
মেথড যুক্ত করে একটি কন্ট্রোলার তৈরি করবে।
Controllers-এর জন্য মিডলওয়্যার নির্দিষ্ট করা যায়, যা কন্ট্রোলারের মেথডগুলোর আগে বা পরে কাজ করে। এটি নিরাপত্তা এবং অথেনটিকেশনের জন্য ব্যবহৃত হয়।
public function __construct()
{
$this->middleware('auth');
}
এটি সমস্ত মেথডের জন্য অথেনটিকেশন মিডলওয়্যার প্রয়োগ করবে।
রিসোর্স কন্ট্রোলার HTTP রিকোয়েস্টের জন্য CRUD অপারেশন (Create, Read, Update, Delete) পরিচালনা করে। এটি ডিফল্টভাবে একটি সম্পূর্ণ RESTful কন্ট্রোলার তৈরি করে।
php artisan make:controller PhotoController --resource
এটি একটি রিসোর্স কন্ট্রোলার তৈরি করবে যা সমস্ত মৌলিক CRUD মেথড ধারণ করবে।
কিছু সময় আপনাকে রিসোর্স কন্ট্রোলারের কিছু মেথড বাদ দিতে হতে পারে। এটি করার জন্য, আপনি only
বা except
প্যারামিটার ব্যবহার করতে পারেন।
Route::resource('photos', PhotoController::class)->only(['index', 'show']);
এটি শুধুমাত্র index
এবং show
মেথডের জন্য রাউট তৈরি করবে।
নেস্টেড রিসোর্স ব্যবহার করে আপনি একটি রিসোর্সের সাথে সম্পর্কিত অন্য একটি রিসোর্স তৈরি করতে পারেন।
Route::resource('users.photos', PhotoController::class);
এটি ইউজার এবং ফটো রিসোর্সের মধ্যে সম্পর্ক তৈরি করবে।
রিসোর্স রাউট তৈরি করার সময়, আপনি স্বয়ংক্রিয়ভাবে নামকরণ করতে পারেন। এই নামগুলি রাউটগুলোর উপর ভিত্তি করে URL তৈরি করতে সাহায্য করে।
Route::resource('photos', PhotoController::class);
এটি photos.index
, photos.show
, ইত্যাদি নাম তৈরি করবে।
আপনি রাউট প্যারামিটারগুলোর নামও কাস্টমাইজ করতে পারেন।
Route::resource('photos', PhotoController::class)->parameters([
'photos' => 'image',
]);
এটি image
প্যারামিটার ব্যবহার করবে।
স্কোপিং রিসোর্স রাউট তৈরি করতে, আপনি রিসোর্সের সাথে নির্দিষ্ট কন্ডিশন যুক্ত করতে পারেন।
Route::resource('users.photos', PhotoController::class)->scoped();
এটি স্কোপিং এর মাধ্যমে নির্দিষ্ট শর্ত যুক্ত করবে।
রিসোর্স ইউআরআই-গুলোর স্থানীয়করণ করতে পারেন। এটি ভাষার ভিত্তিতে রাউট তৈরি করতে সহায়তা করে।
কিছু সময়, আপনাকে রিসোর্স কন্ট্রোলারে অতিরিক্ত মেথড যুক্ত করতে হতে পারে। এটি করা যায় খুব সহজেই।
public function archive($id)
{
// Archive logic
}
সিঙ্গেলটন রিসোর্স কন্ট্রোলার হলো একটি রিসোর্সের জন্য একক উদাহরণ।
Route::singleton('settings', SettingsController::class);
Controllers-এ ডিপেনডেন্সি ইনজেকশন খুব সহজ। এটি আপনাকে কন্ট্রোলার মেথডে অন্যান্য ক্লাস বা সার্ভিস ইনজেক্ট করতে সহায়তা করে।
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
লারাভেল কন্ট্রোলারগুলি অ্যাপ্লিকেশনের লজিকের কেন্দ্রীয় অংশ। এগুলি HTTP রিকোয়েস্ট পরিচালনা করে এবং ডাটা প্রক্রিয়াকরণ করে। কন্ট্রোলার ব্যবহার করে কোডের সংগঠন উন্নত হয় এবং রাউটের সাথে যুক্ত লজিককে পরিষ্কারভাবে আলাদা করা যায়। বিভিন্ন ধরনের কন্ট্রোলার যেমন রিসোর্স কন্ট্রোলার, সিঙ্গেলটন কন্ট্রোলার এবং ডিপেনডেন্সি ইনজেকশন ব্যবহার করে ডেভেলপাররা তাদের অ্যাপ্লিকেশনের কোডকে আরও কার্যকর ও সুরক্ষিত করতে পারেন।
HTTP Requests হল লারাভেল অ্যাপ্লিকেশন এবং ক্লায়েন্টের মধ্যে যোগাযোগের মাধ্যম। লারাভেল HTTP রিকোয়েস্ট পরিচালনা করা খুব সহজ এবং বিভিন্নভাবে কার্যকরভাবে করা যায়। নিচে HTTP Requests-এর বিভিন্ন দিক নিয়ে আলোচনা করা হলো।
HTTP Requests ব্যবহারকারীর ব্রাউজার থেকে সার্ভারে ডেটা পাঠানোর একটি প্রক্রিয়া। লারাভেল এই রিকোয়েস্টগুলি পরিচালনা করতে শক্তিশালী ফিচার সরবরাহ করে, যা ডেভেলপারদের জন্য সহজ করে তোলে।
লারাভেলে, রিকোয়েস্ট ক্লাসের মাধ্যমে রিকোয়েস্টের সমস্ত তথ্য অ্যাক্সেস করা যায়। এটি Illuminate\Http\Request
ক্লাসের মাধ্যমে হয়।
রিকোয়েস্ট অবজেক্ট ব্যবহার করে আপনি বিভিন্ন তথ্য অ্যাক্সেস করতে পারেন।
use Illuminate\Http\Request;
public function store(Request $request)
{
$name = $request->input('name');
}
রিকোয়েস্টের পাথ, হোস্ট এবং পদ্ধতি অ্যাক্সেস করতে পারেন:
$path = $request->path(); // পাথ
$host = $request->host(); // হোস্ট
$method = $request->method(); // পদ্ধতি (GET, POST, ইত্যাদি)
রিকোয়েস্টের হেডার্স অ্যাক্সেস করতে পারেন:
$headers = $request->headers->all(); // সমস্ত হেডার
$userAgent = $request->header('User-Agent'); // নির্দিষ্ট হেডার
ক্লায়েন্টের আইপি ঠিকানা পেতে:
$ip = $request->ip();
বিভিন্ন ফর্ম্যাটে রেসপন্স পাওয়ার জন্য কনটেন্ট নেগোশিয়েশন ব্যবহার করা হয়। আপনি কনটেন্ট টাইপ চেক করতে পারেন:
if ($request->wantsJson()) {
// JSON রেসপন্স
}
লারাভেল PSR-7 রিকোয়েস্ট সমর্থন করে, যা HTTP রিকোয়েস্ট এবং রেসপন্সের জন্য একটি স্ট্যান্ডার্ড ইন্টারফেস।
রিকোয়েস্টের ইনপুট ডেটা অ্যাক্সেস করতে:
$input = $request->all(); // সমস্ত ইনপুট
নির্দিষ্ট ইনপুট পুনরুদ্ধার করতে:
$name = $request->input('name');
ইনপুট উপস্থিতি চেক করতে:
if ($request->has('name')) {
// 'name' ইনপুট আছে
}
অতিরিক্ত ইনপুট একত্রিত করতে:
$request->merge(['age' => 25]);
পুরানো ইনপুট পুনরুদ্ধার করতে:
$oldInput = old('name');
কুকিজ অ্যাক্সেস করতে:
$cookie = $request->cookie('cookie_name');
ইনপুট স্বাভাবিকীকরণের জন্য বিভিন্ন পদ্ধতি ব্যবহার করা যায়।
আপলোড করা ফাইলের তথ্য পেতে:
$file = $request->file('photo');
আপলোড করা ফাইলগুলোর তথ্য পাওয়ার জন্য:
$uploadedFile = $request->file('photo')->store('photos');
আপলোড করা ফাইল সংরক্ষণ করতে:
$request->file('photo')->storeAs('photos', 'filename.jpg');
ট্রাস্টেড প্রক্সি কনফিগার করতে:
use Illuminate\Http\Request;
Request::setTrustedProxies(['192.168.1.1'], Request::HEADER_X_FORWARDED_ALL);
ট্রাস্টেড হোস্ট কনফিগার করতে:
use Illuminate\Http\Request;
Request::setTrustedHosts(['yourdomain.com']);
লারাভেলে HTTP Requests পরিচালনা করা খুব সহজ এবং কার্যকর। রিকোয়েস্ট অবজেক্টের মাধ্যমে বিভিন্ন তথ্য অ্যাক্সেস করা যায়, যা ডেভেলপারদের জন্য একটি শক্তিশালী টুল হিসেবে কাজ করে। ইনপুট, ফাইল, কুকিজ, এবং অন্যান্য রিকোয়েস্ট ডেটা পরিচালনা করার মাধ্যমে লারাভেল উন্নত ও নিরাপদ অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
HTTP Responses হলো ক্লায়েন্টের জন্য সার্ভারের পক্ষ থেকে পাঠানো ডেটা। লারাভেল HTTP রেসপন্স তৈরি এবং পরিচালনা করার জন্য অনেক সুবিধা প্রদান করে। নিচে HTTP Responses-এর বিভিন্ন দিক নিয়ে আলোচনা করা হলো।
লারাভেলে, আপনি সহজেই HTTP রেসপন্স তৈরি করতে পারেন। উদাহরণস্বরূপ:
return response('Hello World', 200);
এটি একটি সাধারণ টেক্সট রেসপন্স তৈরি করবে।
রেসপন্সের সাথে হেডার সংযুক্ত করতে:
return response('Hello World')
->header('Content-Type', 'text/plain');
কুকি সংযুক্ত করতে:
return response('Hello World')->cookie('name', 'value', 60);
এটি 60 মিনিটের জন্য একটি কুকি সংযুক্ত করবে।
লারাভেল কুকিগুলো এনক্রিপ্ট করে, যাতে সেগুলো নিরাপদ থাকে। কুকি তৈরি করার সময়, এনক্রিপশন স্বয়ংক্রিয়ভাবে কার্যকর হয়।
রিডিরেক্টের মাধ্যমে ক্লায়েন্টকে অন্য URL-এ পাঠানো যায়।
return redirect('/home');
নামকৃত রাউটে রিডিরেক্ট করতে:
return redirect()->route('home');
কন্ট্রোলার অ্যাকশনে রিডিরেক্ট করতে:
return redirect()->action([UserController::class, 'index']);
এক্সটার্নাল ডোমেইনে রিডিরেক্ট করতে:
return redirect('https://example.com');
ফ্ল্যাশড সেশন ডেটা সহ রিডিরেক্ট করতে:
return redirect('/home')->with('status', 'Profile updated!');
লারাভেল বিভিন্ন ধরনের রেসপন্স তৈরি করার সুবিধা দেয়, যেমন:
return view('welcome');
return response()->json(['key' => 'value']);
return response()->download($pathToFile);
return response()->file($pathToFile);
return response()->stream(function () {
echo 'Streaming response';
});
লারাভেলে কাস্টম রেসপন্স ম্যাক্রো তৈরি করা যায়। এটি পুনরায় ব্যবহৃত রেসপন্স তৈরি করতে সহায়ক।
Response::macro('foo', function () {
return response()->json(['message' => 'Foo!']);
});
লারাভেল HTTP Responses ক্লায়েন্টের সাথে যোগাযোগের জন্য একটি শক্তিশালী টুল। রেসপন্স তৈরি করা, হেডার এবং কুকি সংযুক্ত করা, রিডিরেক্ট করা, এবং বিভিন্ন ধরনের রেসপন্স তৈরি করার মাধ্যমে ডেভেলপাররা তাদের অ্যাপ্লিকেশনকে আরও কার্যকর এবং ব্যবহারকারী-বান্ধব করতে পারেন। HTTP Responses ব্যবহারে ক্লায়েন্টের অভিজ্ঞতা উন্নত হয় এবং ডেটার নিরাপত্তা নিশ্চিত করা যায়।
লারাভেল ভিউস(Laravel Views) Laravel এর গুরুত্বপূর্ণ অংশ যা অ্যাপ্লিকেশনের UI (User Interface) বা ফ্রন্টএন্ড প্রদর্শনের জন্য দায়ী। Laravel ভিউস মূলত HTML ফাইল, তবে Laravel Blade টেমপ্লেট ইঞ্জিন ব্যবহার করে এটি আরও ডাইনামিক এবং শক্তিশালী হয়ে ওঠে। Laravel এর MVC (Model-View-Controller) আর্কিটেকচারে ভিউ হল সেই অংশ যেখানে ব্যবহারকারীর জন্য ডেটা দেখানো হয়।
Laravel এর ভিউস অ্যাপ্লিকেশনের প্রেজেন্টেশন লেয়ারের জন্য ব্যবহৃত হয়। এগুলো Blade টেমপ্লেট ইঞ্জিন দিয়ে তৈরি হয় এবং সাধারণত .blade.php
এক্সটেনশন ব্যবহার করে। Blade টেমপ্লেট ইঞ্জিন PHP এবং HTML মিক্স করে ভিউ তৈরির প্রক্রিয়াকে সহজ করে তোলে।
Laravel শুধু Blade টেমপ্লেট ইঞ্জিন নয়, JavaScript ফ্রেমওয়ার্ক যেমন React বা Vue এর সাথেও কাজ করতে পারে। আপনি laravel/ui
বা Jetstream
প্যাকেজের মাধ্যমে Vue/React ইনস্টল করতে পারেন। React/Vue ভিউ রেন্ডার করতে হলে .jsx
বা .vue
ফাইল তৈরি করতে হবে।
Blade ফাইলগুলো Laravel এর resources/views
ফোল্ডারে থাকে। Blade টেমপ্লেট ইঞ্জিন ব্যবহারের জন্য ভিউ ফাইল তৈরি করতে .blade.php
এক্সটেনশন ব্যবহার করতে হয়। উদাহরণস্বরূপ:
<!-- resources/views/welcome.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>Laravel App</title>
</head>
<body>
<h1>Laravel অ্যাপে স্বাগতম!</h1>
</body>
</html>
ভিউ রেন্ডার করতে কন্ট্রোলার থেকে এটি কল করতে হবে:
public function showWelcome() {
return view('welcome');
}
Laravel আপনাকে ভিউ ফাইলগুলোকে সাবডিরেক্টরির মধ্যে সাজাতে দেয়। উদাহরণস্বরূপ, আপনি resources/views/admin/dashboard.blade.php
নামে একটি ভিউ তৈরি করতে পারেন এবং এটি রেন্ডার করতে পারেন:
return view('admin.dashboard');
Laravel আপনাকে একাধিক ভিউ অপশন দিয়ে প্রথম পাওয়া ভিউ রেন্ডার করতে দেয়:
return view()->first(['custom', 'default']);
এটি প্রথমে custom.blade.php
খুঁজবে, না পেলে default.blade.php
রেন্ডার করবে।
কোনো ভিউ রয়েছে কিনা তা যাচাই করতে view()->exists()
ফাংশন ব্যবহার করা যেতে পারে:
if (view()->exists('admin.dashboard')) {
return view('admin.dashboard');
}
কন্ট্রোলার থেকে ভিউতে ডেটা পাঠানো যায় একটি অ্যাসোসিয়েটিভ অ্যারের মাধ্যমে:
public function showProfile() {
return view('profile', ['name' => 'John Doe']);
}
এই ডেটা Blade টেমপ্লেটে অ্যাক্সেস করা যায়:
<p>স্বাগতম, {{ $name }}!</p>
কিছু ডেটা যা সব ভিউতে শেয়ার করতে চান, view()->share()
ফাংশন ব্যবহার করা যায়। সাধারণত, এটি AppServiceProvider
এর boot()
মেথডে ব্যবহার করা হয়:
public function boot() {
view()->share('appName', 'Laravel Application');
}
এখন এই $appName
ভেরিয়েবল সমস্ত ভিউতে উপলব্ধ থাকবে।
ভিউ কম্পোজার হল একটি ফাংশন যা নির্দিষ্ট ভিউয়ের জন্য ডেটা রেন্ডার করার আগে ডেটা পাস করতে সাহায্য করে। উদাহরণস্বরূপ:
View::composer('profile', function ($view) {
$view->with('count', User::count());
});
এটি profile
ভিউতে $count
ভেরিয়েবল পাঠাবে।
ভিউ ক্রিয়েটর ভিউ তৈরি হওয়ার মুহূর্তে ডেটা পাস করে। এটা ভিউ রেন্ডার হওয়ার আগে চালানো হয়।
ভিউগুলোকে প্রি-কম্পাইল করার মাধ্যমে Laravel আপনার অ্যাপ্লিকেশনকে দ্রুততর করতে পারে। এটি Artisan কমান্ড দিয়ে করা হয়:
php artisan view:cache
ভিউ ক্যাশ ক্লিয়ার করতে পারেন:
php artisan view:clear
Laravel ভিউ ব্যবস্থাপনা Blade টেমপ্লেট ইঞ্জিনের মাধ্যমে সহজ, ডাইনামিক এবং পুনঃব্যবহারযোগ্য। Laravel এর মাধ্যমে আপনি খুব সহজে ভিউ তৈরি, ডেটা পাস, এবং অপ্টিমাইজ করতে পারেন, যা অ্যাপ্লিকেশনের ফ্রন্টএন্ড উন্নত করে।
Blade লারাভেলের টেম্পলেট ইঞ্জিন, যা HTML তৈরির জন্য ব্যবহৃত হয়। এটি ডাইনামিক কন্টেন্ট তৈরি করতে সাহায্য করে এবং কোড লেখার প্রক্রিয়াকে সহজ করে তোলে। নিচে Blade Templates-এর বিভিন্ন দিক ও উদাহরণসহ আলোচনা করা হলো।
Blade টেম্পলেট ইঞ্জিন লারাভেলের সাথে ডাইনামিক কন্টেন্ট তৈরি করতে ব্যবহৃত হয়। Blade-এর সাহায্যে কোড লেখার প্রক্রিয়া অনেক সহজ হয়।
ব্লেড হল লারাভেলের ডিফল্ট টেম্পলেট ইঞ্জিন। এটি HTML ডাইনামিকভাবে তৈরি করতে ব্যবহৃত হয় এবং এর কিছু প্রধান বৈশিষ্ট্য হল:
@if
, @foreach
, @extends
, ইত্যাদি ব্যবহার করে লজিকাল স্ট্রাকচার তৈরি করতে সহায়তা করে।Livewire একটি প্যাকেজ যা Blade টেম্পলেটগুলোর কার্যকারিতা বাড়ায়। উদাহরণস্বরূপ:
// Livewire Component
class Counter extends Component
{
public $count = 0;
public function increment()
{
$this->count++;
}
public function render()
{
return view('livewire.counter');
}
}
Blade টেম্পলেটে ব্যবহার:
<div>
<h1>{{ $count }}</h1>
<button wire:click="increment">Increase</button>
</div>
Blade-এ ডেটা প্রদর্শন করতে {{ }}
সিম্বল ব্যবহার করুন:
<h1>{{ $title }}</h1>
যেখানে $title
হচ্ছে কন্ট্রোলার থেকে পাস করা ডেটা।
Blade স্বয়ংক্রিয়ভাবে ডেটা এনকোড করে, যা নিরাপত্তার জন্য গুরুত্বপূর্ণ। তবে, HTML রেন্ডার করতে চাইলে {!! !!}
ব্যবহার করুন:
{!! $htmlContent !!}
এখানে $htmlContent
একটি HTML স্ট্রিং।
Blade টেম্পলেটগুলি JavaScript ফ্রেমওয়ার্কের সাথে মিলে কাজ করতে পারে। উদাহরণস্বরূপ, Vue.js ব্যবহার করে:
<div id="app">
<example-component></example-component>
</div>
এবং app.js
ফাইল:
new Vue({
el: '#app',
});
Blade ডিরেকটিভগুলি বিভিন্ন কার্যকলাপের জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ:
@if ($user->isAdmin())
<p>Welcome, Admin!</p>
@endif
@switch($role)
@case('admin')
<p>You are an admin.</p>
@break
@case('user')
<p>You are a user.</p>
@break
@default
<p>Guest</p>
@endswitch
Blade-এ লুপ ব্যবহার করতে পারেন:
@foreach ($items as $item)
<li>{{ $item }}</li>
@endforeach
এখানে $items
হচ্ছে একটি অ্যারে।
লুপ চলাকালীন, @foreach
এর ভিতরে loop
ভেরিয়েবল ব্যবহার করে লুপের তথ্য পাওয়া যায়:
@foreach ($items as $item)
<p>{{ $loop->iteration }}: {{ $item }}</p>
@endforeach
শর্ত সাপেক্ষে ক্লাস যুক্ত করতে:
<div class="{{ $isActive ? 'active' : 'inactive' }}"></div>
এখানে $isActive
একটি বুলিয়ান ভেরিয়েবল।
অতিরিক্ত অ্যাট্রিবিউট যোগ করতে:
<input type="text" name="name" {{ $attributes }}>
এখানে $attributes
অ্যাসোসিয়েটিভ অ্যারে।
Subview অন্তর্ভুক্ত করতে @include
ব্যবহার করুন:
@include('partials.header')
এখানে partials.header
একটি Blade ভিউ ফাইল।
কোনো ব্লক কোড শুধুমাত্র একবার রেন্ডার করতে @once
ব্যবহার করুন:
@once
<script src="script.js"></script>
@endonce
Blade-এ কাঁচা PHP কোড ব্যবহার করতে পারেন:
<?php echo $variable; ?>
Blade কমেন্ট যোগ করতে:
{{-- This is a comment --}}
ব্লেড কম্পোনেন্ট একটি পুনঃব্যবহারযোগ্য UI উপাদান তৈরি করতে সহায়তা করে। এটি কম্পোনেন্ট ভিত্তিক আর্কিটেকচার ব্যবহার করে, যা কোডের পুনঃব্যবহারযোগ্যতা এবং পরিষ্কারতা বৃদ্ধি করে।
বৈশিষ্ট্য:
<!-- resources/views/components/alert.blade.php -->
<div class="alert alert-{{ $type }}">
{{ $message }}
</div>
ব্যবহার:
<x-alert type="success" message="Operation successful!" />
কম্পোনেন্ট রেন্ডার করতে:
<x-alert type="success" message="Operation successful!" />
কম্পোনেন্টে ডেটা পাঠাতে:
<x-alert :type="$type" :message="$message" />
এখানে $type
এবং $message
হচ্ছে ভ্যারিয়েবল।
কম্পোনেন্ট অ্যাট্রিবিউটগুলি কাস্টমাইজ করতে:
<x-button :size="$size" class="btn-primary" />
Blade-এ কিছু রিজার্ভড কীওয়ার্ড রয়েছে, যেমন @if
, @foreach
, ইত্যাদি। এই কীওয়ার্ডগুলি ব্যবহার করতে পারেন, কিন্তু কাস্টম ডিরেক্টিভ তৈরি করতে গেলে এড়িয়ে চলা উচিত।
কম্পোনেন্টের জন্য স্লট ব্যবহার করা যায়, যা কাস্টম কন্টেন্টের জন্য উপযুক্ত।
<x-card>
<x-slot name="header">
Card Header
</x-slot>
Card Body
</x-card>
ইনলাইন কম্পোনেন্ট ভিউ তৈরি করতে:
<x-alert>
<x-slot name="message">
This is an alert!
</x-slot>
</x-alert>
ডাইনামিক কম্পোনেন্ট তৈরি করতে:
@component($componentName, ['data' => $data])
@endcomponent
এখানে $componentName
একটি ভ্যারিয়েবল যা কম্পোনেন্টের নাম ধারণ করে।
কম্পোনেন্টগুলি ম্যানুয়ালি রেজিস্টার করতে পারেন AppServiceProvider
এর boot
মেথডে:
Blade::component('alert', AlertComponent::class);
অ্যানোনিমাস কম্পোনেন্ট তৈরি করতে:
<x-alert>
<p>This is an alert!</p>
</x-alert>
অ্যানোনিমাস ইনডেক্স কম্পোনেন্ট ব্যবহার করতে:
<x-alert />
কম্পোনেন্টে ডেটা প্রপার্টি অ্যাক্সেস করতে:
{{ $message }}
কম্পোনেন্টের প্যারেন্ট ডেটা অ্যাক্সেস করতে:
{{ $parentData }}
অ্যানোনিমাস কম্পোনেন্টের পাথ কাস্টমাইজ করা যায়।
লেনদেন নির্মাণের জন্য Blade-এ লেআউট তৈরি করা যায়। উদাহরণ:
<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
</head>
<body>
@yield('content')
</body>
</html>
এবং একটি ভিউ:
@extends('layouts.app')
@section('content')
<h1>Welcome to My App</h1>
@endsection
লেআউট তৈরিতে কম্পোনেন্ট ব্যবহার করতে:
<x-layout>
// Content here
</x-layout>
টেম্পলেট ইনহেরিটেন্স ব্যবহার করে লেআউট তৈরি করতে:
@extends('layouts.app')
@section('content')
// Content here
@endsection
ফর্ম তৈরি করতে:
<form action="/submit" method="POST">
@csrf
<input type="text" name="name">
<button type="submit">Submit</button>
</form>
CSRF ফিল্ড যোগ করতে:
@csrf
HTTP মেথড স্পেসিফাই করতে:
@method('PUT')
ভ্যালিডেশন এরর দেখানোর জন্য:
@if ($errors->any())
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
স্ট্যাক ব্যবহার করতে:
@push('scripts')
<script src="script.js"></script>
@endpush
সার্ভিস ইনজেকশন করে Blade কম্পোনেন্টে যুক্ত করতে:
use App\Services\MyService;
class MyComponent extends Component
{
public function __construct(MyService $service)
{
// Use the service
}
}
ইনলাইন Blade টেমপ্লেট রেন্ডার করতে:
{!! view('inline.template', $data) !!}
Blade ফ্রাগমেন্ট রেন্ডার করতে:
{!! render('partials.fragment') !!}
Blade সম্প্রসারণ করতে নতুন ডিরেকটিভ তৈরি করতে পারেন:
Blade::directive('myDirective', function ($expression) {
return "<?php echo 'Hello ' . {$expression}; ?>";
});
কাস্টম ইকো হ্যান্ডলার তৈরি করতে:
Blade::directive('customEcho', function ($expression) {
return "<?php echo strtoupper($expression); ?>";
});
কাস্টম If স্টেটমেন্ট তৈরি করতে:
Blade::if('active', function ($value) {
return $value == 'active';
});
লারাভেল ব্লেড এবং কম্পোনেন্টের মধ্যে মূল পার্থক্য হলো:
ব্লেড মূলত টেম্পলেট তৈরি করার জন্য ব্যবহৃত হয়, যেখানে কম্পোনেন্ট হলো ব্লেডের সাহায্যে তৈরি করা রিইউজেবল UI ইউনিট। ব্লেডে টেম্পলেটিং করা হয়, আর কম্পোনেন্টে UI লজিক ও স্টাইলিং অন্তর্ভুক্ত করা হয়।
Blade টেম্পলেট ইঞ্জিন লারাভেলের একটি শক্তিশালী অংশ, যা ডেভেলপারদের জন্য সহজ এবং কার্যকরী উপায়ে ডাইনামিক কন্টেন্ট তৈরি করতে সহায়তা করে। Blade এর বৈশিষ্ট্যগুলি ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে আরো ব্যবহারকারী-বান্ধব ও কার্যকরী করে তুলতে পারেন। Blade-এর উদাহরণগুলোকে কাজে লাগিয়ে ডেভেলপাররা দ্রুত এবং নিরাপদভাবে সাইট তৈরি করতে সক্ষম হন।
Vite হল একটি অত্যাধুনিক বিল্ড টুল যা দ্রুত ডেভেলপমেন্ট পরিবেশ এবং উন্নত পারফরম্যান্সের জন্য ডিজাইন করা হয়েছে। এটি মূলত ফ্রন্টএন্ড ফ্রেমওয়ার্কের জন্য ব্যবহৃত হয়, যেমন Vue, React, এবং Laravel এর জন্য।
নোড ইনস্টল করা: Vite ব্যবহার করতে হলে প্রথমে আপনার কম্পিউটারে Node.js ইনস্টল করতে হবে। Node.js অফিসিয়াল ওয়েবসাইট থেকে সর্বশেষ ভার্সন ডাউনলোড করুন এবং ইনস্টল করুন।
Vite এবং Laravel প্লাগইন ইনস্টল করা: নিচের কমান্ডগুলি ব্যবহার করে আপনার Laravel প্রজেক্টে Vite এবং এর প্লাগইন ইনস্টল করুন:
npm install --save-dev vite laravel-vite-plugin
Vite কনফিগার করতে vite.config.js
ফাইল তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন:
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
export default defineConfig({
plugins: [
laravel({
input: 'resources/js/app.js',
refresh: true,
}),
],
});
আপনার resources/js/app.js
এবং resources/css/app.css
ফাইলগুলোতে স্ক্রিপ্ট এবং স্টাইল যুক্ত করুন।
import './bootstrap';
import '../css/app.css';
Vite ডেভেলপমেন্ট সার্ভার চালাতে নিচের কমান্ডটি ব্যবহার করুন:
npx vite
Vite সহজেই JavaScript ফাইলগুলোকে পরিচালনা করে। আপনি ES মডিউল এবং বিভিন্ন ফ্রেমওয়ার্ক যেমন Vue এবং React ব্যবহার করতে পারেন।
অ্যালিয়াস: নিয়মিত রেফারেন্স করা ডিরেক্টরিগুলোর জন্য অ্যালিয়াস তৈরি করতে পারেন:
Vite::macro('image', fn (string $asset) => $this->asset("resources/images/{$asset}"));
Vite সমর্থন করে Vue এবং React। উদাহরণস্বরূপ, Vue কম্পোনেন্ট ব্যবহার করতে:
import { createApp } from 'vue';
import App from './App.vue';
createApp(App).mount('#app');
Vite স্বয়ংক্রিয়ভাবে URL গুলোকে আপডেট করে, এবং আপনি URL গুলোকে সহজে ম্যানিপুলেট করতে পারেন।
CSS ফাইলগুলোকে app.css
ফাইলে ইম্পোর্ট করুন:
@import './variables.css';
Laravel ব্লেড টেমপ্লেটের মধ্যে Vite স্ক্রিপ্ট যুক্ত করতে @vite
ডাইরেকটিভ ব্যবহার করুন:
<head>
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
Vite দিয়ে স্থির অ্যাসেট (যেমন ইমেজ) প্রক্রিয়াকরণ সহজ। এটি আপনাকে স্বয়ংক্রিয়ভাবে ইমেজ লোড করতে সাহায্য করবে।
Vite স্বয়ংক্রিয়ভাবে আপনার পরিবর্তনগুলো অনুসরণ করে এবং পরিবর্তন হলে পৃষ্ঠা রিফ্রেশ করে।
Vite আপনার অ্যাসেটগুলোকে প্রিফেচ করতে সক্ষম। এতে লোডিং সময় কমে যাবে।
আপনার অ্যাসেট যদি আলাদা ডোমেইনে থাকে তবে .env
ফাইলে ASSET_URL
সেট করুন:
ASSET_URL=https://cdn.example.com
.env
ফাইলে VITE_ প্রিফিক্স সহ ভেরিয়েবল সংজ্ঞায়িত করতে পারেন। উদাহরণস্বরূপ:
VITE_API_URL=http://example.com/api
এবং JavaScript এ ব্যবহার করতে:
import.meta.env.VITE_API_URL
টেস্ট চলাকালীন Vite নিষ্ক্রিয় করতে withoutVite
মেথড ব্যবহার করতে পারেন।
Vite দিয়ে SSR সেটআপ করা সহজ। একটি SSR এন্ট্রি পয়েন্ট তৈরি করুন এবং কনফিগার করুন।
আপনার ট্যাগগুলিতে অতিরিক্ত অ্যাট্রিবিউট যুক্ত করতে পারেন।
CSP নিরাপত্তার জন্য ননস যুক্ত করতে পারেন।
SRI ব্যবহার করে আপনার অ্যাসেটগুলির জন্য ইনটিগ্রিটি নিশ্চিত করতে পারেন।
অতিরিক্ত অ্যাট্রিবিউট যুক্ত করতে useScriptTagAttributes
এবং useStyleTagAttributes
মেথড ব্যবহার করতে পারেন।
Vite-এর আচরণ কাস্টমাইজ করতে বিভিন্ন অপশন ব্যবহার করতে পারেন।
কিছু প্লাগইন URLs সংশোধন করতে পারে, এবং আপনাকে vite.config.js
এ সেগুলো ম্যানুয়ালি সংশোধন করতে হতে পারে।
এগুলো হলো Vite ব্যবহার করে Laravel অ্যাপ্লিকেশনে অ্যাসেট বান্ডলিংয়ের প্রক্রিয়া।
লারাভেলে URL উৎপাদনের জন্য বিভিন্ন পদ্ধতি এবং ফাংশন ব্যবহার করা হয়। এটি আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশে URL তৈরি করতে সাহায্য করে। নিচে কিছু গুরুত্বপূর্ণ দিক তুলে ধরা হলো:
লারাভেলে কিছু বিল্ট-ইন হেল্পার ফাংশন আছে যা URL উৎপাদন করতে ব্যবহৃত হয়:
url(): একটি নির্দিষ্ট URL উৎপাদন করে।
$url = url('profile');
// ফলস্বরূপ: http://your-app.com/profile
route(): নামকরণ করা রুটের জন্য URL উৎপাদন করে।
$url = route('profile.show', ['id' => 1]);
// ফলস্বরূপ: http://your-app.com/profile/1
action(): কন্ট্রোলারের একটি অ্যাকশন বা মেথডের জন্য URL উৎপাদন করে।
$url = action([ProfileController::class, 'show'], ['id' => 1]);
// ফলস্বরূপ: http://your-app.com/profile/1
URL উৎপাদনের জন্য আপনাকে রুট তৈরি করতে হবে। রুটগুলো সাধারণত routes/web.php
ফাইলে সংজ্ঞায়িত করা হয়:
use App\Http\Controllers\ProfileController;
Route::get('/profile/{id}', [ProfileController::class, 'show'])->name('profile.show');
যদি আপনি বিভিন্ন পরিবেশে (যেমন ডেভেলপমেন্ট, প্রোডাকশন) আলাদা URL ব্যবহার করতে চান, তবে .env
ফাইলে URL সংরক্ষণ করতে পারেন:
APP_URL=http://your-app.com
এবং কোডে ব্যবহার করতে পারেন:
$url = config('app.url') . '/profile';
URL উৎপাদনের সময় আপনি পাথ এবং কোয়েরি স্ট্রিংও যুক্ত করতে পারেন:
$url = url('search?q=laravel');
URL উৎপাদনের সময় যদি আপনি নির্দিষ্ট ফরম্যাটে URL তৈরি করতে চান, তবে ফরম্যাটিং প্যারামিটার ব্যবহার করতে পারেন:
$url = route('profile.show', ['id' => 1], false);
// false ব্যবহার করলে অ্যাপ্লিকেশন URL সঠিকভাবে হবে
কিছু উদাহরণ নিচে দেওয়া হলো:
// সাধারণ URL
$url = url('home');
// রুটের মাধ্যমে URL
$url = route('home');
// অ্যাকশন দ্বারা URL
$url = action([HomeController::class, 'index']);
// কোয়েরি স্ট্রিং সহ URL
$url = url('search', ['q' => 'laravel']);
লারাভেল URL উৎপাদন খুবই সহজ এবং এটি আপনার অ্যাপ্লিকেশনকে ডাইনামিক URL তৈরি করতে সাহায্য করে। বিভিন্ন ফাংশন এবং হেল্পার ব্যবহার করে আপনি প্রয়োজনীয় URL উৎপাদন করতে পারেন। যদি আপনার আরও কোনো প্রশ্ন থাকে বা বিস্তারিত জানতে চান, জানাতে পারেন!
HTTP সেশন একটি প্রক্রিয়া যা ব্যবহারকারীদের জন্য স্টেটফুল অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। এটি ব্যবহারকারীর তথ্য সংরক্ষণ করে, যাতে পরবর্তী রিকোয়েস্টে সেই তথ্য ব্যবহার করা যায়।
Laravel-এ সেশন কনফিগারেশন config/session.php
ফাইলে করা হয়। এখানে আপনি সেশন ড্রাইভার, লাইফটাইম এবং অন্যান্য সেটিংস কাস্টমাইজ করতে পারবেন।
'driver' => env('SESSION_DRIVER', 'file'),
'path' => '/',
'lifetime' => 120,
Laravel বিভিন্ন সেশন ড্রাইভার সমর্থন করে, যেমন:
ড্রাইভার ব্যবহার করতে চাইলে সংশ্লিষ্ট ড্রাইভারটির কনফিগারেশন ঠিকমত করতে হবে।
তথ্য পুনরুদ্ধার করা
সেশনে সংরক্ষিত তথ্য পুনরুদ্ধার করতে session()
ফাংশন বা Session
ফ্যাসেড ব্যবহার করা হয়:
$value = session('key');
// অথবা
$value = Session::get('key');
তথ্য সংরক্ষণ করা
তথ্য সেশনে সংরক্ষণ করতে:
session(['key' => 'value']);
// অথবা
Session::put('key', 'value');
ফ্ল্যাশ ডেটা ব্যবহার করা হয় যখন আপনি কিছু তথ্য একবারের জন্য সেশন মধ্যে রাখতে চান। এটি সাধারণত রিডাইরেক্টের পর ব্যবহৃত হয়:
session()->flash('status', 'Task was successful!');
// অথবা
Session::flash('status', 'Task was successful!');
সেশন থেকে তথ্য মুছতে:
session()->forget('key');
// অথবা
Session::forget('key');
সেশন আইডি পুনর্জন্ম
যদি আপনি সেশনের আইডি পরিবর্তন করতে চান (যেমন সেশন হাইজ্যাকিং প্রতিরোধে), আপনি regenerate
মেথড ব্যবহার করতে পারেন:
$request->session()->regenerate();
কিছু ক্ষেত্রে আপনি চাইতে পারেন যে ব্যবহারকারীরা একসাথে একাধিক সেশন ব্যবহার না করতে পারে। এটি সেশন ব্লকিং নামকরণ করা হয়, যা কাস্টম ইমপ্লিমেন্টেশন দ্বারা করা যায়।
ড্রাইভার ইমপ্লিমেন্ট করা
আপনার কাস্টম সেশন ড্রাইভার তৈরি করতে হলে, প্রথমে একটি ক্লাস তৈরি করুন যা SessionHandlerInterface
ইন্টারফেস ইমপ্লিমেন্ট করে।
use SessionHandlerInterface;
class CustomSessionHandler implements SessionHandlerInterface {
// আপনার কাস্টম মেথডগুলি এখানে
}
ড্রাইভার নিবন্ধন করা
আপনার কাস্টম ড্রাইভারটি নিবন্ধন করতে AppServiceProvider
ক্লাসের boot
মেথডে Session::extend
ব্যবহার করুন:
use Illuminate\Support\Facades\Session;
public function boot()
{
Session::extend('custom', function ($app) {
return new CustomSessionHandler();
});
}
HTTP সেশন ব্যবহার করে আপনি ব্যবহারকারীর তথ্য সংরক্ষণ ও পরিচালনা করতে পারেন, যা স্টেটফুল অ্যাপ্লিকেশন তৈরিতে সহায়ক। লারাভেলের সেশন ব্যবস্থাপনা ব্যবহার করে আপনি সহজেই সেশন তথ্য পুনরুদ্ধার, সংরক্ষণ এবং মুছে ফেলতে পারেন।
লারাভেল ভ্যালিডেশন একটি শক্তিশালী বৈশিষ্ট্য, যা ব্যবহারকারীর ইনপুট সঠিক ও নিরাপদ নিশ্চিত করতে সহায়তা করে। আসুন প্রতিটি ফিচারকে বিস্তারিতভাবে উদাহরণসহ আলোচনা করি।
ভ্যালিডেশন একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা ইনপুট ডেটা যাচাই করে। এটি ব্যবহারকারীদের কাছ থেকে সঠিক ডেটা সংগ্রহে সাহায্য করে এবং নিরাপত্তা বাড়ায়।
এটি শুরু করতে হলে, প্রথমে একটি রাউট তৈরি করতে হবে যা ফর্ম ডেটা প্রক্রিয়া করবে।
রাউট নির্ধারণ করা
Route::post('/submit', [MyController::class, 'store']);
কন্ট্রোলার তৈরি করা
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MyController extends Controller
{
public function store(Request $request)
{
// ভ্যালিডেশন লজিক এখানে হবে
}
}
ভ্যালিডেশন লজিক সাধারণত কন্ট্রোলারের store
মেথডে লেখা হয়।
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email',
]);
// প্রাপ্ত ডেটা প্রক্রিয়া
}
যদি ইনপুট ভ্যালিডেশন ব্যর্থ হয়, লারাভেল স্বয়ংক্রিয়ভাবে ত্রুটি তথ্য পাঠাবে। Blade টেমপ্লেটে এটি প্রদর্শনের জন্য নিচের কোড ব্যবহার করুন:
@if ($errors->any())
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
যখন ভ্যালিডেশন ব্যর্থ হয়, পূর্ববর্তী ইনপুটগুলি ফিরে আনতে old()
ফাংশন ব্যবহার করতে পারেন।
<input type="text" name="name" value="{{ old('name') }}">
কিছু ফিল্ড অপশনাল হলে, সেগুলোর জন্য nullable
নিয়ম ব্যবহার করুন:
'address' => 'nullable|max:255',
লারেরভেল JSON রেসপন্স হিসাবে ভ্যালিডেশন ত্রুটি প্রদান করে। যদি AJAX কল হয়, তবে JSON ফরম্যাটে ত্রুটি তথ্য পাবেন।
{
"message": "The given data was invalid.",
"errors": {
"name": ["The name field is required."]
}
}
ফর্ম রিকোয়েস্ট ব্যবহারের জন্য একটি নতুন ক্লাস তৈরি করুন।
ফর্ম রিকোয়েস্ট তৈরি করা
php artisan make:request StoreUserRequest
অনুমোদন
public function authorize()
{
return true; // বা আপনার কাস্টম অনুমোদন লজিক
}
ত্রুটি বার্তা কাস্টমাইজ করা
public function messages()
{
return [
'name.required' => 'নাম প্রয়োজন।',
];
}
protected function prepareForValidation()
{
$this->merge([
'name' => trim($this->name),
]);
}
$validator = Validator::make($data, [
'name' => 'required|max:255',
]);
ডিফল্টভাবে, যদি ভ্যালিডেশন ব্যর্থ হয়, লারাভেল স্বয়ংক্রিয়ভাবে আগের পৃষ্ঠায় রিডাইরেক্ট করে।
নামকৃত ত্রুটি ব্যাগের মাধ্যমে আপনি ত্রুটি গুলিকে গ্রুপ করতে পারেন।
return redirect()->back()->withErrors($validator, 'login');
আপনার কাস্টম বার্তা ল্যাঙ্গুয়েজ ফাইলের মাধ্যমে নির্ধারণ করতে পারেন।
// resources/lang/en/validation.php
return [
'custom' => [
'name' => [
'required' => 'নাম ক্ষেত্রটি প্রয়োজন।',
],
],
];
লারাভেল বিভিন্ন ভ্যালিডেশন নিয়ম প্রদান করে, যেমন required
, email
, max
, min
, unique
, ইত্যাদি।
$rules['address'] = 'required_if:status,active';
আপনি ইনপুট অ্যারে ভ্যালিডেট করতে পারেন।
$rules = [
'items.*.name' => 'required|max:255',
];
নেস্টেড ইনপুটগুলির জন্য ভ্যালিডেশন:
$rules = [
'products.*.options.*.value' => 'required',
];
আপনি ত্রুটি বার্তা কাস্টমাইজ করতে পারেন সূচক এবং অবস্থানের মাধ্যমে।
আপনার ফাইল আপলোডের জন্য ভ্যালিডেশন নিয়ম যুক্ত করতে পারেন।
$rules = [
'file' => 'required|file|mimes:jpg,png|max:2048', // 2MB এর বেশি নয়
];
পাসওয়ার্ডের জন্য শক্তিশালী ভ্যালিডেশন:
$rules = [
'password' => 'required|min:8|confirmed',
];
আপনার কাস্টম নিয়ম তৈরি করতে পারেন:
Validator::extend('custom_rule', function ($attribute, $value, $parameters, $validator) {
return $value === 'custom_value';
});
আপনার ভ্যালিডেশন নিয়মগুলি Rule
অবজেক্ট ব্যবহার করে কাস্টমাইজ করতে পারেন।
use Illuminate\Validation\Rule;
$rules = [
'email' => [
'required',
'email',
Rule::unique('users')->ignore($userId),
],
];
ভ্যালিডেশন লজিকে ক্লোজার ব্যবহার করে শর্ত যুক্ত করতে পারেন।
$validator = Validator::make($data, [
'name' => [
'required',
function ($attribute, $value, $fail) {
if ($value === 'admin') {
$fail('নামটি admin হতে পারে না।');
}
},
],
]);
লারাভেলের মধ্যে ইম্প্লিসিট রুলস তৈরি করতে পারেন। উদাহরণস্বরূপ, ইনপুটের প্রয়োজনীয়তা নিশ্চিত করতে।
লারাভেল ভ্যালিডেশন একটি শক্তিশালী ফিচার, যা ডেটা নিরাপত্তা ও সঠিকতা নিশ্চিত করে। এই বৈশিষ্ট্যগুলি ব্যবহার করে আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং ব্যবহারকারী-বান্ধব করতে পারেন। কোনো বিশেষ ফিচার বা উদাহরণের উপর আরও বিস্তারিত জানতে চাইলে জানাবেন!
লারাভেল ত্রুটি পরিচালনা একটি শক্তিশালী ব্যবস্থা যা ডেভেলপারদের ত্রুটি এবং ব্যতিক্রমগুলি সহজে পরিচালনা করতে সাহায্য করে। এটি উন্নয়ন প্রক্রিয়ায় আরও স্পষ্টতা এবং সুবিধা নিয়ে আসে।
ত্রুটি পরিচালনার জন্য লারাভেলের কনফিগারেশন ফাইল config/app.php
এ পাওয়া যায়। এখানে আপনি লগিং এবং ত্রুটি প্রদর্শন কনফিগার করতে পারেন:
'debug' => env('APP_DEBUG', false),
APP_DEBUG
পরিবেশ ভেরিয়েবলে আপনি ডিবাগ মোড চালু বা বন্ধ করতে পারেন।
লারাভেল নিজস্ব Handler
ক্লাসে সব ব্যতিক্রমগুলি পরিচালনা করে। এই ক্লাসটি app/Exceptions/Handler.php
এ অবস্থিত।
public function render($request, Throwable $exception)
{
return parent::render($request, $exception);
}
এখানে আপনি কাস্টম লজিক যুক্ত করতে পারেন।
লারাভেল ব্যতিক্রমগুলি রিপোর্ট করার জন্য report
মেথড ব্যবহার করে।
public function report(Throwable $exception)
{
// কাস্টম রিপোর্টিং লজিক
parent::report($exception);
}
লারাভেল বিভিন্ন লগ স্তরের মাধ্যমে ব্যতিক্রমগুলি রিপোর্ট করে, যেমন:
debug
info
notice
warning
error
critical
alert
emergency
আপনি লগ স্তর নির্ধারণ করে গুরুত্বপূর্ণ ত্রুটিগুলি চিহ্নিত করতে পারেন।
আপনি নির্দিষ্ট ধরনের ব্যতিক্রম উপেক্ষা করতে পারেন, যাতে সেগুলি রিপোর্ট না হয়।
protected $dontReport = [
InvalidArgumentException::class,
];
ব্যতিক্রমগুলি রেন্ডার করার জন্য render
মেথড ব্যবহার করুন। উদাহরণস্বরূপ, 404 ত্রুটির জন্য কাস্টম পৃষ্ঠা রেন্ডার করতে পারেন:
public function render($request, Throwable $exception)
{
if ($exception instanceof ModelNotFoundException) {
return response()->view('errors.404', [], 404);
}
return parent::render($request, $exception);
}
লারাভেলে, ব্যতিক্রমগুলি রিপোর্টযোগ্য এবং রেন্ডারযোগ্য হিসেবে শ্রেণীবদ্ধ করা হয়। রিপোর্টযোগ্য ব্যতিক্রমগুলি সাধারণত লগে সংরক্ষিত হয়, আর রেন্ডারযোগ্য ব্যতিক্রমগুলি ব্যবহারকারীকে দেখানো হয়।
আপনি রিপোর্ট করা ব্যতিক্রমগুলি থ্রটল করতে পারেন, অর্থাৎ একই ত্রুটি বারবার রিপোর্ট হওয়া থেকে বিরত রাখতে পারেন।
protected function shouldReport(Throwable $exception)
{
return !($exception instanceof ThrottlingException);
}
HTTP ব্যতিক্রমগুলি যেমন 404, 500 ইত্যাদি সাধারণত অঙ্গীভূত হয়। আপনি render
মেথডে HTTP ব্যতিক্রমগুলির জন্য কাস্টম লজিক যুক্ত করতে পারেন।
আপনি সহজেই কাস্টম HTTP ত্রুটি পৃষ্ঠা তৈরি করতে পারেন। উদাহরণস্বরূপ, resources/views/errors/404.blade.php
ফাইল তৈরি করে 404 ত্রুটি কাস্টমাইজ করুন:
@extends('layouts.app')
@section('content')
<h1>404 - পৃষ্ঠা পাওয়া যায়নি</h1>
<p>আপনার অনুসন্ধানকৃত পৃষ্ঠা পাওয়া যায়নি।</p>
@endsection
লারাভেল ত্রুটি পরিচালনা একটি শক্তিশালী এবং নমনীয় ব্যবস্থা যা ডেভেলপারদের ত্রুটি এবং ব্যতিক্রমগুলি সহজে পরিচালনা করতে সহায়তা করে। এই ব্যবস্থার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং ব্যবহারকারী-বান্ধব করতে পারেন। আরও কোনও প্রশ্ন থাকলে জানাবেন!
লারাভেলে লগিং একটি গুরুত্বপূর্ণ ব্যবস্থা যা অ্যাপ্লিকেশনটি চলাকালীন কী ঘটছে তা পর্যবেক্ষণ করতে সাহায্য করে। এটি ডেভেলপারদের ত্রুটি, ব্যতিক্রম এবং গুরুত্বপূর্ণ কার্যক্রমের তথ্য সংগ্রহ করতে দেয়, যা সমস্যার সমাধানে সহায়ক হয়।
২. কনফিগারেশন
লারাভেল লগিং কনফিগারেশন config/logging.php
ফাইলে পাওয়া যায়। এখানে বিভিন্ন চ্যানেল, ড্রাইভার এবং লগ স্তরের কনফিগারেশন করা হয়।
'log_level' => env('LOG_LEVEL', 'debug'),
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
],
৩. উপলব্ধ চ্যানেল ড্রাইভার
লারাভেল বিভিন্ন ধরনের চ্যানেল ড্রাইভার সরবরাহ করে, যেমন:
৪. চ্যানেল প্রয়োজনীয়তা
প্রতিটি চ্যানেলের জন্য নির্দিষ্ট প্রয়োজনীয়তা থাকে, যেমন slack
চ্যানেলের জন্য একটি Slack ওয়েবহুক URL প্রয়োজন।
৫. ডিপ্রিকেটেড সতর্কতা লগ করা
Laravel 9 থেকে ডিপ্রিকেটেড ফিচারের লগ করার জন্য সমর্থন দেয়। deprecate()
মেথড ব্যবহার করে আপনি সতর্কতা লগ করতে পারেন।
Log::deprecate('এই ফিচারটি ভবিষ্যতে সরানো হবে।');
৬. লগ স্ট্যাক তৈরি করা
একাধিক চ্যানেল একত্রিত করে একটি লগ স্ট্যাক তৈরি করতে পারেন, যা একাধিক আউটপুটে একই সময়ে লগ লেখার সুবিধা দেয়।
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
৭. লগ বার্তা লেখা
লগ বার্তা লেখার জন্য Log
ফেসেড ব্যবহার করা হয়। আপনি বিভিন্ন স্তরের লগ বার্তা লিখতে পারেন, যেমন emergency
, alert
, critical
, error
, warning
, notice
, info
, এবং debug
।
Log::info('এটি একটি তথ্যগত বার্তা।');
Log::error('এটি একটি ত্রুটির বার্তা।');
৮. প্রসঙ্গগত তথ্য
লগ বার্তার সাথে অতিরিক্ত প্রসঙ্গগত তথ্য যুক্ত করা যায়:
Log::info('ব্যবহারকারীর তথ্য আপডেট করা হয়েছে', ['user_id' => $user->id]);
৯. নির্দিষ্ট চ্যানেলে লেখা
নির্দিষ্ট একটি চ্যানেলে লগ বার্তা পাঠানোর জন্য:
Log::channel('slack')->critical('Critical issue found!');
১০. মনোলগ চ্যানেল কাস্টমাইজেশন
লারাভেল Monolog
লাইব্রেরি ব্যবহার করে লগিং প্রক্রিয়াটি পরিচালনা করে। Monolog
এর হ্যান্ডলার কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, slack
চ্যানেলের জন্য কাস্টম Monolog হ্যান্ডলার ব্যবহার করা যায়।
```php
use Monolog\Handler\SlackWebhookHandler;
use Monolog\Logger;
Log::channel('slack')->getMonolog()->pushHandler(
new SlackWebhookHandler($webhookUrl, '#channel', 'MonologBot', true, ':boom:', true, Logger::CRITICAL)
);
```
১১. কাস্টম চ্যানেল তৈরি করা
ফ্যাক্টরির মাধ্যমে কাস্টম চ্যানেল তৈরি করা সম্ভব:
```php
Log::extend('custom', function($app) {
return new CustomLoggerHandler();
});
```
১২. পেইলের মাধ্যমে লগ মেসেজ টেইল করাpail
টুল ব্যবহার করে লগ বার্তাগুলি রিয়েল টাইমে টেইল করা যায়।
**ইনস্টলেশন**
`pail` ইনস্টল করতে নিম্নলিখিত কমান্ড ব্যবহার করুন:
```bash
composer require pail/pail
```
**ব্যবহার**
ইনস্টলেশনের পর, আপনি টার্মিনালে কমান্ড দিয়ে লগ টেইল করতে পারেন:
```bash
php artisan log:tail
```
১৩. লগ ফিল্টার করা
আপনি লগ বার্তাগুলিকে ফিল্টার করে নির্দিষ্ট স্তরের বার্তাগুলি দেখতে পারেন। উদাহরণস্বরূপ, শুধু error
স্তরের বার্তাগুলি দেখতে চাইলে:
```bash
php artisan log:tail --level=error
```
এভাবে, লারাভেলের শক্তিশালী লগিং ব্যবস্থা ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের কার্যক্রম মনিটর করতে এবং ত্রুটি সমাধান করতে পারবেন।
Read more